package com.shengxing.lljl.payment.Alipay.entity;


import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.HashMap;
import java.util.Map;

@Data
@EqualsAndHashCode(callSuper = false)

public class AliPayReq {
    // 必要的支付宝参数
//    private String appId;      // 应用ID
//    private String method;      // 请求类型（接口名称）
//    private String charset;     // 字符编码格式
//    private String signType;    // 签名方式
//    private String timestamp;   // 请求时间ddd
//    private String version;     // API版本
//    private String sign;        // 签名
//
//     额外的请求参数，比如支付金额、订单信息等
    private String outTradeNo;  // 商户订单号
    private String subject;     // 订单标题

    private String totalAmount; // 交易金额

    public AliPayReq(String outTradeNo, String subject, String totalAmount) {
        this.outTradeNo = outTradeNo;
        this.subject = subject;
        this.totalAmount = totalAmount;
    }
    // 获取当前时间戳
    private String getCurrentTimestamp() {
        // 获取当前时间戳，格式为yyyy-MM-dd HH:mm:ss
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new java.util.Date());
    }

    // 获取请求参数map
    public Map<String, String> getRequestParams() {
        Map<String, String> params = new HashMap<>();
//        params.put("app_id", appId);
//        params.put("method", method);
//        params.put("charset", charset);
//        params.put("sign_type", signType);
//        params.put("timestamp", timestamp);
//        params.put("version", version);
        params.put("out_trade_no", outTradeNo);
        params.put("subject", subject);
        params.put("total_amount", totalAmount);
//        params.put("body", body != null ? body : "");
//        params.put("return_url", returnUrl != null ? returnUrl : "");
//        params.put("notify_url", notifyUrl != null ? notifyUrl : "");

        return params;
    }

    // 构造签名（伪代码示意，签名过程要根据支付宝文档中的要求来实现）
    public String buildSign() {
        // 计算参数的签名，通常是将请求参数按字典排序并拼接后计算MD5/SHA256等加密签名
        String signString = createSignString(getRequestParams());
        return signString;  // 这里只是返回拼接的签名字符串，实际上需要对字符串做加密
    }

    // 拼接参数字符串（字典排序+拼接）
    private String createSignString(Map<String, String> params) {
        // 这里是拼接请求参数的关键
        StringBuilder signString = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            signString.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        signString.deleteCharAt(signString.length() - 1); // 删除最后一个&符号
        return signString.toString();
    }



}
